<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

include_once APPLICATION_PATH . '/models/Mapper/BaseMapper.php';

/**
 * Description of ClientesMapper
 *
 * @author kristian
 */
class Spalm_Model_Mapper_ClientesMapper extends Spalm_Model_Mapper_BaseMapper{

    /**
     * Guarda el cliente en la base de datos
     * @param <type> $cliente
     */
    public function save($cliente)
    {

        if (!($cliente instanceof Spalm_Model_Single_ClienteEntity)){
            throw new TipoIncorrectoException('No es un cliente');
        }

        $data = array(
            'razon_social' => $cliente->getRazonSocial(),
            'localidad_id' => $cliente->getLocalidad()->getPK(),
            'tipo_documento_id' => $cliente->getTipoDocumento()->getPK(),
            'numero_documento' => $cliente->getNumeroDocumento(),
            'domicilio' => $cliente->getDomicilio(),
            'nro_telefono' => $cliente->getNroTelefono(),
            'email' => $cliente->getEmail()
        );

        $id = $cliente->getPK();

        // si no tiene id
        // (se creo un nuevo clienteEntity y se le asignaron valores)
        if (null === $id) {
            // se evita el id (ya que no existe)
            unset($data['id']);
            // se inserta en la base de datos
            $this->getDbTable()->insert($data);

        } else {    // si tiene su id (se habia recuperado de la base de datos)
            // se actualiza el contenido de la base de datos
            $this->getDbTable()->update($data, array('id = ?' => $id));
        }
    }

    public function find($id,$cliente )
    {

        if (!($cliente instanceof Spalm_Model_Single_ClienteEntity)){
            throw new TipoIncorrectoException('No es un cliente');
        }

        if (!isset ($cliente)){
            $cliente = new Spalm_Model_Single_ClienteEntity();
        }

        $result = $this->getDbTable()->find($id);
        if (0 == count($result)) {
            return;
        }
        $row = $result->current();

        $localidad = new Spalm_Model_Single_LocalidadEntity();
        $localidad = $localidad->find($row->localidad_id);

        $tipoDocumento = new Spalm_Model_Single_TipoDocumentoEntity();
        $tipoDocumento = $tipoDocumento->find($row->tipo_documento_id);

        $cliente->setPK($row->id);
        $cliente->setRazonSocial($row->razon_social);
        $cliente->setLocalidad($localidad);
        $cliente->setTipoDocumento($tipoDocumento);
        $cliente->setNumeroDocumento($row->numero_documento);
        $cliente->setDomicilio($row->domicilio);
        $cliente->setNroTelefono($row->nro_telefono);
        $cliente->setEmail($row->email);
    }

    public function fetchAll($where = null)
    {
        $resultSet = $this->getDbTable()->fetchAll($where);
        $entries   = array();

        foreach ($resultSet as $row) {
            $cliente = new Spalm_Model_Single_ClienteEntity();

            $localidad = new Spalm_Model_Single_LocalidadEntity();
            $localidad = $localidad->find($row->localidad_id);

            $tipoDocumento = new Spalm_Model_Single_TipoDocumentoEntity();
            $tipoDocumento = $tipoDocumento->find($row->tipo_documento_id);

            $cliente->setPK($row->id);
            $cliente->setRazonSocial($row->razon_social);
            $cliente->setLocalidad($localidad);
            $cliente->setTipoDocumento($tipoDocumento);
            $cliente->setNumeroDocumento($row->numero_documento);
            $cliente->setDomicilio($row->domicilio);
            $cliente->setNroTelefono($row->nro_telefono);
            $cliente->setEmail($row->email);
            $cliente->setMapper($this);

            $entries[] = $cliente;
        }
        return $entries;
    }
}


?>
